<?php
require_once CORE_PATH.'/function/send_functions.php';
// 发送中心服务
class SendCenterService extends Service {
	//private $senddata = null;
	private $smsSender = null;
	public function __construct() {
		//$this->init();
	}
	
	/**
	 * 外部调用只要的发送方法。
	 * 要发送的数据已数组形式保存（$data）。因为每一种短信服务方处理流程不一致，有待于进一步提炼。
	 * 	 * $data格式未确定，暂时通过sms,mms,email定义每一中的解析方式来做。
	 * $senddata参数数据格式，为长度为一的数组[ key='center_senddata' , value=array() ] 
	 * $sendData['center_senddata']	= array(
	 * 									$key	=>	array(	'content'	=>'',	//短信内容。为字符串
	 * 														'receivers'	=>'',	//接  收   者。数组形势保存号码或邮箱。例如：array('13710377526','13710377524','13710377522')
	 * 														'channel'	=>'',	//发送方式。由sms,mms,email组成的字符串，已','分割。
	 * 														'infotype'	=>'',	//数据类型。发送的短信属于哪类数据，即发送那类短信。商品券短信，客服短信，验证码短信等。
	 * 																	   		//目前取值：'coupon'--商品券，'vertify'--验证码
	 * 													 )
	 * 								  );
	 * 		$sendData[$coupon['id']]['content'] = $msg_;//短信内容
			$sendData[$coupon['id']]['receivers'][]=$coupon['receiver_mobile'];
			$sendData[$coupon['id']]['channel']=explode(',',$coupon['channel']);
			$sendData[$coupon['id']]['infotype']='coupon';//发送的短信属于哪类数据，即发送那类短信。商品券短信，克服短信等。
		}
		$data['center_senddata']=$sendData;
	 * @param array $senddata
	 */
	public function send($senddata){
		Log::record('发送中心记录：开始--'.date('Y-m-d H:i:s'),Log::K_ORDER,Log::FILE);
		Log::record('发送中心记录：将发条数-> ['.count($senddata['center_senddata']).']',Log::K_ORDER,Log::FILE);
		if( empty($senddata)||empty($senddata['center_senddata']) ){
			Log::record('发送中心记录：发送数据为空！',Log::K_ORDER,Log::FILE);
			Log::record('发送中心记录：结束'.date('Y-m-d H:i:s'),Log::K_ORDER,Log::FILE);
			Log::record('----------------------------------------',Log::K_ORDER,Log::FILE);
			Log::save(); 
			return false;
		}
		$ary_hadcouponid;//发送成功的
		foreach($senddata['center_senddata'] as $key=>$sdata){
			if( in_array('sms',$sdata['channel']) ) {
				Log::record('发送中心记录：发送方式-> [sms]',Log::K_ORDER,Log::FILE);
				Log::record('发送中心记录：发送数据-> key=['.$key.'] receivers=['.parseAry2Str($sdata['receivers']).']',Log::K_ORDER,Log::FILE);
				
				$result = $this->sendSms($sdata['receivers'],$sdata['sms_content']);
				
				Log::record('发送中心记录：发送结果-> key=['.$key.']  result=['.parseAry2Str($result).']',Log::K_ORDER,Log::FILE);
				
				if($result['status']==1){
					if($sdata['infotype']=='coupon'){
						$ary_hadcouponid['sms'][] = $key;
					}
				}
			}
			if( in_array('mms',$sdata['channel']) ) {
				Log::record('发送中心记录：发送方式-> [mms]',Log::K_ORDER,Log::FILE);
				Log::record('发送中心记录：发送数据-> key=['.$key.'] receivers=['.parseAry2Str($sdata['receivers']).']',Log::K_ORDER,Log::FILE);
				$sdata['mms_content'] = mb_convert_encoding($sdata['mms_content'],"GBK","UTF-8");
				
				//生成要发送的图片（商品，品牌，券码，贺卡结合在一起的图片）
				$sendImgPath = service('SmsImg')->getMmsCard($sdata['shelf_id'],$sdata['passcode'],$sdata['namecard'],$key);
				
				$result = $this->sendMms($sdata['receivers'],$sdata['mms_content'],$sdata['mms_title'],$sendImgPath);
				
				Log::record('发送中心记录：发送结果-> key=['.$key.']  result=['.parseAry2Str($result).']',Log::K_ORDER,Log::FILE);
				
				if($result['status']==1){
					if($sdata['infotype']=='coupon'){
						$ary_hadcouponid['mms'][] = $key;
					}
				}
			}
		}
		
		if( !empty($ary_hadcouponid['sms']) ){
			Log::record('发送中心记录：更新Coupon表发送纪录-> sms count=['.count($ary_hadcouponid['sms']).']  couponid=['.parseAry2Str($ary_hadcouponid['sms']).']',Log::K_ORDER,Log::FILE);
			$updatano = service('Coupon')->update4SysHadSended($ary_hadcouponid['sms']);
			Log::record('发送中心记录：更新Coupon表发送纪录，更新数据sms ['.$updatano.'] 条！',Log::K_ORDER,Log::FILE);
		}
		if( !empty($ary_hadcouponid['mms']) ){
			Log::record('发送中心记录：更新Coupon表发送纪录-> mms count=['.count($ary_hadcouponid['mms']).']  couponid=['.parseAry2Str($ary_hadcouponid['mms']).']',Log::K_ORDER,Log::FILE);
			$updatano = service('Coupon')->update4SysHadSended($ary_hadcouponid['mms']);
			Log::record('发送中心记录：更新Coupon表发送纪录，更新数据 mms['.$updatano.'] 条！',Log::K_ORDER,Log::FILE);
		}
		
		Log::record('发送中心记录：结束'.date('Y-m-d H:i:s'),Log::K_ORDER,Log::FILE);
		Log::record('----------------------------------------',Log::K_ORDER,Log::FILE);
		Log::save(); 
	}
	
	
	/** 发送短信，发送多个号码也是提交一次。因此返回结果就代表了所有号码的发送状态 
	 *	参数说明：
	 *	$content		=>'',	//短信内容。为字符串
	 * 	$ary_mobiles	=>'',	//接  收   者。数组形势保存号码或邮箱。例如：array('13710377526','13710377524','13710377522')
	 * 														
	 **/
	public function sendSms($ary_mobiles,$content){
		if(empty($ary_mobiles)||empty($content)){
			return false;
		}
		if(C('SMS_SIMULATION')){//测试用到，直接返回结果。
			$result['status']=1;//表示成功或失败
			$result['code']=$statusCode;//内部定义的统一处理的状态码，将服务商的状态码进行转换程序便于统一处理。
			$result['msg']='模拟发送sms，发送成功！';//状态码对应的描述信息
			return $result;
		}

		$result = $this->getSender()->sendSms($ary_mobiles,$content);
		return $result;
	}
	
	/** 发送彩信 **/
	public function sendMms($ary_mobiles,$content,$title,$cardfpath){
		
		$configTpltfpath = K_CONFIG_PATH.'config_mms.php';
		$ary_mmsconfig = (include $configTpltfpath);
		$baseuploadpath= 'data/uploads';
		//生成六位随机数
    	include_once( QUICK_ADDONE_PATH.'/libs/String.class.php' );
    	$randval = String::rand_string(6,1);
    	$zipfpath = MMS_ZIP_PATH.'/'.time().$randval.".zip";
		$MMSContent = createZip4Mms($zipfpath
									,MMS_IMG_PATH.'/'.$cardfpath
									,$ary_mmsconfig['smillayout']
									,$content);
		if(C('MMS_SIMULATION')){//测试用到，直接返回结果。
			$result['status']=1;//表示成功或失败
			$result['code']=$statusCode;//内部定义的统一处理的状态码，将服务商的状态码进行转换程序便于统一处理。
			$result['msg']='模拟发送mms，发送成功！';//状态码对应的描述信息
			return $result;
		}
		$result = $this->getSender()->sendMms($title,$ary_mobiles,$MMSContent);
		return $result;
	}
	
	private function getSender(){
		if($this->smsSender==null){
			$this->smsSender = service('Sender');
		}
		return $this->smsSender;
	}
	
	/** 查询有效的支付 **/
	public function sendEmail($data){

	}
	
	/**
	 * 解析要发送的信息。通过模板的定义来设置相关数据组成要发送的最终数据
	 * 将所有要发送的商品券数据进行解析。
	 * 一个商品券对应一条短信。
	 * @param unknown_type $data
	 */
	public function parseCouponSendData($couponlist){
		Log::record('转换发送数据->parseCouponSendData->starting--------------------------------------',Log::DEBUG,Log::FILE);
		
		foreach($couponlist as $coupon){
			//添加重新发送的礼券说明
			$_sendtimes = intval($coupon['send_times']);
			$_title_extstr = '';
			if($_sendtimes>0)$_title_extstr = "（此为重新发送的".K('SP_COUPON_NM')."）";
			
			$sendData[$coupon['id']]['infotype']	='coupon';//发送的短信属于哪类数据，即发送那类短信。商品券短信，克服短信等。
			$sendData[$coupon['id']]['receivers'][]	=$coupon['receiver_mobile'];
			$sendData[$coupon['id']]['channel']		=explode(',',$coupon['channel']);
			$sendData[$coupon['id']]['namecard']	=$coupon['namecard'];
			$sendData[$coupon['id']]['shelf_id']		=$coupon['shelf_id'];
			$sendData[$coupon['id']]['passcode']		=$coupon['passcode'];
			
			$tplt_data['{sender_name}'] 	= $coupon['sender_name'];//发送者
			$tplt_data['{sms_message}'] 	= $coupon['message'];//短信发送的文字
			$tplt_data['{partner_title}']	= $coupon['partner_title'];//商户名称
			$tplt_data['{coupon_passcode}']	= $coupon['passcode'];//商品券码
			$tplt_data['{goods_title}']		= $coupon['goods_title'];//商品名称
			$tplt_data['{goods_quantity}']	= $coupon['quantity'];//商品数量
			$tplt_data['{goods_ext_info}']	= '';//商品额外信息
			$tplt_data['{goods_expired_date}']= exchangeTimeDesc($coupon['expired_date']);//有效期
			
			$tplt_data['{goods_ext_info}']	= getMMSExtInfo($coupon['goods_get_type'],$coupon['partner_phone'],$coupon['partner_mobile']);
			$tplt_data = assembleMMSData($tplt_data);
			$ary_templet = getMMSContentTemplet();
			
			foreach($sendData[$coupon['id']]['channel'] as $channel){
				$templet = $ary_templet['tplt_'.$channel];
				$templet_title = $ary_templet['title_'.$channel];
				Log::record('转换发送数据->加载模板->'.$templet,Log::DEBUG,Log::FILE);
				$sendData[$coupon['id']][$channel.'_content'] = $_title_extstr.strtr($templet,$tplt_data);
				$sendData[$coupon['id']][$channel.'_title'] = $_title_extstr.strtr($templet_title,$tplt_data);
				Log::record('转换发送数据->加载结果->'.$sendData[$coupon['id']][$channel.'_content'],Log::DEBUG,Log::FILE);
			}
			
			Log::record('转换发送数据->最终结果->'.parseAry2Str($sendData[$coupon['id']]),Log::DEBUG,Log::FILE);
		
		}
		$data['center_senddata']=$sendData;
		Log::record('转换发送数据->parseCouponSendData->ended------------------------------------------',Log::DEBUG,Log::FILE);
		Log::save(); 
		return $data;
	}
	
	
	private function parseData4Email($data){
		
	}
	
	
	//服务初始化
	public function init($data = '') {
	}
	
	
	//运行服务，系统服务自动运行
	public function run() {
	}
}
?>